cmake配置项目引用动态库

您所在的位置:网站首页 vscode 链接动态库 cmake配置项目引用动态库

cmake配置项目引用动态库

2023-09-07 03:48| 来源: 网络整理| 查看: 265

note 本文将介绍使用FIND_PACKAGE配置项目动态库的方法 cmake version: 3.18 platform: win10 20H2 概述 创建了一个动态库,再由主项目调用该动态库。 find.cmake的内容是: 1.定义动态库的头文件所在路径 2. 定义库所在路径 写好cmake文件后,也可以方便给其他人调用,省却了编写的麻烦 目录结构 . │ CMakeLists.txt # cmake的配置文件 │ ├─build # 存放 cmake配置生成的文件 ├─cmake │ findcalc.cmake # 动态库的cmake文件 │ ├─ext # 第三方库存放目录 │ └─calc # 编写的动态库存放目录 │ ├─dll # dll 文件所在目录 │ │ └─debug # debug配置下生成的动态库 │ │ calc.dll │ │ │ ├─include # 动态库头文件所在路径 │ │ calc_interface.h │ │ │ └─lib # 动态库的库文件 │ calc.lib │ └─src # 主项目的源文件 main.cc

动态库已经写好,下面开始编写配置文件。

编写 find.cmake文件

正如上面的名字,我这里定义的是名为findcalc.cmake的文件,放在 cmake目录下,内容如下

# 指定库头文件所在路径 FIND_PATH(calc_INCLUDE_DIR calc_interface.h ${CMAKE_CURRENT_SOURCE_DIR}/ext/calc/include) # 指定库文件所在路径 FIND_LIBRARY(calc_LIBRARY calc.lib ${CMAKE_CURRENT_SOURCE_DIR}/ext/calc/lib) # 为了下游可以继续使用 set(calc_FOUND FALSE) if (calc_INCLUDE_DIR AND calc_LIBRARY) set(calc_FOUND TRUE) endif()

这个文件主要用于CMakeLists.txt中引用动态库

编写CMakeLists.txt 指定cmake版本 cmake_minimum_required(VERSION 3.18) 指定项目名 PROJECT(lib_demo) 将主项目src文件夹下的所有源文件拷贝到变量demo_src中 aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src demo_src) 指定 cmake搜索库路径 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) 重点来了,项目引用动态库 重点来了,项目引用动态库 重点来了,项目引用动态库 FIND_PACKAGE(calc REQUIRED) 创建可执行程序 add_executable(${PROJECT_NAME} ${demo_src}) 主项目指定动态库头文件路径 target_include_directories(${PROJECT_NAME} PUBLIC ${calc_INCLUDE_DIR})

注意: calc_INCLUDE_DIR来自cmake文件中定义的变量,方便下游使用

主项目连接动态库 target_link_libraries(${PROJECT_NAME} PUBLIC ${calc_LIBRARY}) 拷贝动态库到可执行目录下 add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/ext/calc/dll/$" $) cmake配置结果

转到 build目录,执行cmake .. 即可生成对应的 VS解决方案

使用VS打开解决方案,并生成对应的可执行程序,同时可以看见 ,dll文件已经拷贝到生成的目录下 生成前, 没有debug目录 生成后,debug目录 完整的CMakeLists.txt cmake_minimum_required(VERSION 3.18) PROJECT(lib_demo) # 2. to get all source files aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src demo_src) set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) FIND_PACKAGE(calc REQUIRED) if (calc_FOUND) add_executable(${PROJECT_NAME} ${demo_src}) # 指定库头文件路径 target_include_directories(${PROJECT_NAME} PUBLIC ${calc_INCLUDE_DIR}) # 指定库名 target_link_libraries(${PROJECT_NAME} PUBLIC ${calc_LIBRARY}) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/ext/calc/dll/$" $) else() message(status "its not found") endif(calc_FOUND)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3